package java_option.player.javacv.util;

/**
 * 
 * @author java红了 <br/>
 *         2020-10-1217:18:58
 */
public class Sleep {
	/**
	 * 
	 * @param period 两帧之间代码实际执行的时间, 单位纳秒
	 * @param diff   两帧之间的间隔, 单位纳秒
	 */
	public static void sleep(long period, long diff) {

		// 绘制两帧消耗的时间小于两帧之间的间隔
		if (period < diff) {
			// 求两个时间的时间差
			// 单位纳秒
			long nanoMillis = diff - period;
			try {
				// 第一个参数(单位毫秒)-- 纳妙/1000转化为微妙，再/1000转换为毫秒
				long mills = nanoMillis / 1000 / 1000;
				if (mills == 0) {
					System.out.println("sleep *** " + nanoMillis);
					Thread.sleep(0, (int) nanoMillis);
					System.out.println(Thread.currentThread());
				} else {
					// 只传第一个参数以外的时间 也就是除了毫秒以外的时间
					// 所以第二个参数应该传入微妙和纳秒 范围为(0,999999]
					int nanos = (int) (nanoMillis % (mills * 1000 * 1000));
					System.out.println("sleep *** " + mills + " " + nanoMillis);
					Thread.sleep(mills, nanos);
					System.out.println(Thread.currentThread());
				}
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}

	}
}
